package com.labichaoka.chaoka.utils;

import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 检测工具类
 * Created by haosunTsao on 2016/8/22.
 */
public class DetectionUtil {

    /**
     * 主要功能：检测名字是否为中文
     */

    public static boolean isNameChina(String name) {
//        String regEx = "^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$";
////        Pattern p = Pattern.compile(regEx);
////        // 建造一个匹配器
////        Matcher m = p.matcher(str);
////        // 进行判断，得到结果
////        return m.matches();

        if (name.contains("·") || name.contains("•")) {
            if (name.matches("^[\\u4e00-\\u9fa5]+[·•][\\u4e00-\\u9fa5]+$")) {
                return true;
            } else {
                return false;
            }
        } else {
            if (name.matches("^[\\u4e00-\\u9fa5]+$")) {
                return true;
            } else {
                return false;
            }
        }

    }

    /**
     * 主要功能：检测身份证号
     */

    public static boolean isIdCard(String str) {
        String reg1 = "[0-9]{17}x";
        String reg2 = "[0-9]{17}X";
        String reg3 = "[0-9]{15}";
        String reg4 = "[0-9]{18}";
        return str.matches(reg1) || str.matches(reg2) || str.matches(reg3) || str.matches(reg4);
    }


    public static boolean isValidMoney(String money) {
        Pattern pattern = java.util.regex.Pattern.compile("^[0-9]+$|^[0-9]+\\.[0-9]{1,99}$"); // 判断小数点后2位的数字的正则表达式
        Matcher match = pattern.matcher(money);
        return match.matches();
    }


    /**
     * 主要功能： 检测是否为手机号
     *
     * @param mobiles
     * @return
     */
    public static boolean isMobileNO(String mobiles) {
        Pattern p = Pattern.compile("^((11[0-9])|(12[0-9])|(13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\\d{8}$");
        Matcher m = p.matcher(mobiles);
        return m.matches();
    }

    /**
     * 主要功能： 检测是否为邮箱
     * @param email
     * @return
     */
    public static boolean isEmail(String email){
        String reg="\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
        Pattern p=Pattern.compile(reg);
        Matcher m=p.matcher(email);
        return m.matches();
    }

    /**
     * 主要功能：检测密码是否符合
     */
    public static boolean isPassword(String password) {
        int length = password.length();

        if (length < 6 || length > 16) {
            return false;
        }

        // 首先,使用Pattern解释要使用的正则表达式，其中^表是字符串的开始，$表示字符串的结尾。
        Pattern pt = Pattern.compile("^[0-9a-zA-Z_]+$");

        // 然后使用Matcher来对比目标字符串与上面解释得结果
        Matcher mt = pt.matcher(password);

        // 如果能够匹配则返回true。实际上还有一种方法mt.find()，某些时候，可能不是比对单一的一个字符串，
        // 可能是一组，那如果只要求其中一个字符串符合要求就可以用find方法了.
        return mt.matches();
    }

    /**
     * 主要功能：检测验证码是否符合
     */
    public static boolean isVerification(String verification) {
        int length = verification.length();
        Pattern pt = Pattern.compile("^\\d{4}$");

        Matcher mt = pt.matcher(verification);

        return mt.matches();
    }


    /**
     * 主要功能：检测QQ是否符合
     */
    public static boolean isQQ(String qq) {
        int length = qq.length();

        // 首先,使用Pattern解释要使用的正则表达式，其中^表是字符串的开始，$表示字符串的结尾。
        Pattern pt = Pattern.compile("^\\d{5,11}$");

        // 然后使用Matcher来对比目标字符串与上面解释得结果
        Matcher mt = pt.matcher(qq);

        // 如果能够匹配则返回true。实际上还有一种方法mt.find()，某些时候，可能不是比对单一的一个字符串，
        // 可能是一组，那如果只要求其中一个字符串符合要求就可以用find方法了.
        return mt.matches();
    }

    /**
     * 主要功能：检测名字长度
     */
    public static boolean isName(String name) {
        int length = name.length();

        return !(length < 2 || length > 30);
    }

    /**
     * 主要功能：检测中文,数字，英文
     */
    public static boolean isAddress(String str) {
        String regEx = "[\u4e00-\u9fa5\\w]+";
        Pattern p = Pattern.compile(regEx);
        // 建造一个匹配器
        Matcher m = p.matcher(str);
        // 进行判断，得到结果
        return m.matches();
    }

    /**
     * 主要功能：检测银行卡是否符合
     */
    public static boolean isBankCard(String qq) {
        int length = qq.length();

		/*
         * if (length < 5 || length > 11) { return false; }
		 */

        // 首先,使用Pattern解释要使用的正则表达式，其中^表是字符串的开始，$表示字符串的结尾。
        Pattern pt = Pattern.compile("^\\d{16,19}$");

        // 然后使用Matcher来对比目标字符串与上面解释得结果
        Matcher mt = pt.matcher(qq);

        // 如果能够匹配则返回true。实际上还有一种方法mt.find()，某些时候，可能不是比对单一的一个字符串，
        // 可能是一组，那如果只要求其中一个字符串符合要求就可以用find方法了.
        return mt.matches();
    }

    /**
     * 将每三个数字加上逗号处理（通常使用金额方面的编辑）
     * @param str 需要处理的字符串
     * @return 处理完之后的字符串
     */
    public static String addComma(String str) {
        DecimalFormat decimalFormat = new DecimalFormat(",###");
        String backStr;
        if (str.contains(".")){
            String[] strs = str.split("\\.");
            String str1 = strs[0];
            String str2 = strs[1];
            backStr=decimalFormat.format(Double.parseDouble(str1))+"."+str2;
        }else{
            backStr=decimalFormat.format(Double.parseDouble(str));
        }
        return backStr;
    }


}
